package JDK常用类库.日期时间格式;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.Date;

/**
 * @author zx
 * @create 2022-08-31 18:17
 */
public class Time {
    public static void main2(String[] args) throws ParseException {
        String str = "2022-02-02 10:23";
        //标准时间格式：("yyyy-MM-dd hh:mm ss")
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm");
        String start = "2022-02-02 09:24";
        Date time1 = sdf.parse(start);
        Date time2 = sdf.parse(str);
        //date.getTime()可以计算出距离1970/1/1到date对象日期的毫秒数
        long day = time2.getTime() / 1000 / 60 - time1.getTime() / 1000 / 60;
        System.out.println(day);
    }

    public static void main(String[] args) throws IOException {
        Calendar calendar = Calendar.getInstance();

        calendar.get (Calendar.YEAR);//年
        calendar.get (Calendar.MONTH);//月 ，1月对应0，2月对应1，因此需要+1
        calendar.get (Calendar.DATE);//日
        calendar.get (Calendar.HOUR_OF_DAY);//时
        calendar.get (Calendar.MINUTE);//分
        calendar.get (Calendar.SECOND);//秒
        calendar.get (Calendar.DAY_OF_WEEK);//星期，周日是1,剩下自己推算)
    }

    /**
     * @param args 两个日期相差的天数
     * 求2022-2-1到2022-3-1相差的天数
     * 求两个日期的时间差(可以以天、小时、分钟、秒为单位输出)
     */
    public static void main3(String[] args) {
        LocalDateTime time1 = LocalDateTime.of(2022, 2, 1, 0, 0);
        LocalDateTime time2 = LocalDateTime.of(2022, 3, 1, 0, 0);
        long result = Duration.between(time1, time2).toDays(); // 28

        LocalDateTime time3 = LocalDateTime.of(2022,5,13,13,13,59,23);
        LocalDateTime time4= LocalDateTime.of(2022,5,14,13,13,59,23);
        int res = (int) Duration.between(time3,time4).toMinutes();
    }

    /**
     * @param args 遍历某段日期的每一天
     *
     * 遍历2022-01-01到2022-03-01这段日期中的每一天
     *
     * 例题：跑步锻炼
     * 正常情况下,小蓝每天跑 1 千米.如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑 2 千米.
     * 如果同时是周一或月初,小蓝也是跑 2 千米.
     * 小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年 10 月 1 日周四(含).
     * 请问这段时间小蓝总共跑步多少千米？
     */
    public static void main4(String[] args) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, 2000);
        c.set(Calendar.MONTH, 0);
        c.set(Calendar.DAY_OF_MONTH, 1);
        int res = 0;
        for(;;){
            if(c.get(Calendar.DAY_OF_WEEK) == 2 || c.get(Calendar.DATE) == 1){
                res += 2;
            }else{
                res += 1;
            }
            if(c.get(Calendar.YEAR) == 2020 && c.get(Calendar.MONTH) == 9 &&
                    c.get(Calendar.DAY_OF_MONTH) == 1){
                break;
            }
            c.add(Calendar.DATE, 1);//天数自增1
        }
        System.out.println(res);
    }
    /**
     * 方法二：模拟
     */
    static int[] M = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    public void paobu() {
        int y = 2000, m = 1, d = 1, w = 6, ans = 0;
        while (y != 2020 || m != 10 || d != 1) {
            if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) {//判断闰年
                M[2] = 29;
            } else {
                M[2] = 28;// M是全局变量
            }
            d++;
            w = (w + 1) % 7;// w为0为星期天
            if (d > M[m]) {
                d = 1;
                m++;
            }
            if (m > 12) {
                m = 1;
                y++;
            }
            if (d == 1 || w == 1) {
                ans++;// 是月初或者周一多加一次
            }
            ans++;
        }
        // 这个循环是先加值再加日期,所以2020.10.1号的已经加上去了,但是2000.1.1没加上,所以加2
        ans += 2;
        System.out.println(ans);// 8879
    }
}
